/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package exceptions;

import jjclass.ParseException;
import jjclass.Token;

/**
 * Classe representant une erreur d'analyse grammaticale JavaCC
 * @author D.Romain
 * @author O.Riad
 */
public class AnalyseException extends Exception {

    private Token dernierToken;
    private int[][] tokenAttendues;
    private String[] stringTokens; //representation des caractères

    /**
     * Constructeur reprennant les informations de la classe
     * ParseException
     * @param pPe ParseException envoyé par JavaCC 
     */
    public AnalyseException(ParseException pPe) {
        this.dernierToken = pPe.currentToken;
        this.tokenAttendues = pPe.expectedTokenSequences;
        this.stringTokens = pPe.tokenImage;
    }

    /**
     * Methode permettant d'identifier le dernier caractère ayant
     * provoqué une erreur d'analyse
     * @return Un caractère de la grammaire
     */          
    public String getDernierToken() {
        return this.dernierToken.toString();
    }
    
    /**
     * Recupere la ligne du token qui a precedent
     * l'erreur d'analyse     
     * @return Numero ligne
     */
    public int getLigneToken(){
        return this.dernierToken.beginLine;
    }
    
    /**
     * Recupere la colonne du token qui a precedent
     * l'erreur d'analyse     
     * @return Numero colonne
     */
    public int getColonneToken(){
        return this.dernierToken.beginColumn;
    }

    /**
     * Permet de connaitre les caractères que l'on peu metre à la suite
     * du caractère ayant géneré une erreur d'analyse grammaticle
     * @return Chaine representant L'ensemble des caractères suivant possible
     */
    public String tokenExpected() {
        StringBuilder str= new StringBuilder();
        for (int i = 0; i < this.tokenAttendues.length; i++) {
            for (int j = 0; j < this.tokenAttendues[i].length; j++) {
                str.append(stringTokens[this.tokenAttendues[i][j]]).append("\n");
            }
        }
        return str.toString();
    }
}